#pragma onece
#include <vector>
#include <string>
#include <memory>
#include<iostream>
#include<opencv2/opencv.hpp>
#include <onnxruntime_cxx_api.h>
using namespace std;
using namespace cv;

class SuperPoint{
public:
    SuperPoint(const std::string sp_onnx_path, int num_threads=1);
    void DetectAndCompute(cv::Mat image, std::vector<cv::KeyPoint>& kpts, cv::Mat& desc);
    std::vector<float> ApplyTransform(const cv::Mat image);
    void vis(const cv::Mat image, const std::vector<cv::KeyPoint> kpts);
private:
	std::shared_ptr<Ort::Session> sp_session_ = nullptr;
    int num_threads_ = 1;
};